package com.dutiantech.file.core;

import java.io.File;
import java.io.InputStream;
import java.util.Vector;

import org.apache.commons.net.ftp.FTPFileFilter;

/**
 * 	ftp协议的标准接口
 * @author five
 *
 */
public interface FileManager {
	
	/**
	 * 登录
	 * @param userName
	 * @param password
	 * @param host
	 * @param port
	 * @param isPassiveMode	不填此参数则默认被动模式,true 开启被动模式，false 主动模式
	 * @return
	 */
	boolean login(String userName , String password , String host , int port, boolean... isPassiveMode ) ;
	
	/**
	 * 上传文件
	 * @param fileName		文件名
	 * @param file					文件File对象
	 * @return
	 */
	boolean put(String fileName, File file);
	
	/**
	 * 上传文件
	 * @param fileName		文件名
	 * @param body				文件字节数组
	 * @return
	 */
	boolean put( String fileName , byte[] body );
	
	/**
	 * 上传文件
	 * @param fileName		文件名
	 * @param in					输入流
	 * @return
	 */
	boolean put(String fileName ,InputStream in );
	
	/**
	 * 下载并保存文件
	 * @param savePath
	 * @param saveFileName
	 * @param remoteFileName
	 * @return
	 */
	boolean download(String savePath,String saveFileName, String remoteFileName);
	
	/**
	 * 下载并获取inputstream自定义操作
	 * @param remoteFileName
	 * @return
	 */
	InputStream download( String remoteFileName);
	
	/**
	 * cd目录
	 * @param floderName
	 * @return
	 */
	boolean cd(String floderName);
	
	/**
	 * 查询当前目录下所有文件夹
	 * @return
	 */
	Vector<String> lsDirectory() ;
	
	/**
	 * 查询当前目录下所有文件
	 * @return
	 */
	Vector<String> lsFiles() ;
	
	/**
	 * 查询当前目录下指定文件
	 * @return
	 */
	Vector<String> lsFiles(String pathname, FTPFileFilter filter) ;

	/**
	 * 新建目录并cd进去，支持多级目录，已存在则直接cd进去
	 * @param dirPath		支持多级，比如/opt/home
	 * @return
	 */
	boolean mkdir(String dirPath);
	
	/**
	 * 删除文件
	 * @param fileName		文件名
	 * @return
	 */
	boolean remove(String fileName);
	
	/**
	 * 返回到上层目录
	 * @return
	 */
	boolean changeToParentDirectory();
	
	/**
	 * 	 throws RamboRunTimeException
	 */
	void checkState();
	
	/**
	 * 	 throws RamboRunTimeException
	 */
	void exit() ;
	
}
